package com.example.project.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 字段元数据注解
 * 用于在实体类字段上添加描述信息、验证规则等元数据
 * 
 * @author wangxu
 * @date 2025/10/10
 */
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FieldMeta {
    
    /**
     * 字段显示名称
     */
    String name() default "";
    
    /**
     * 字段描述信息
     */
    String description() default "";
    
    /**
     * 是否必填字段
     */
    boolean required() default false;
    
    /**
     * 字段类型（用于前端展示或验证）
     */
    String type() default "text";
    
    /**
     * 字段长度限制（0表示无限制）
     */
    int maxLength() default 0;
    
    /**
     * 字段最小值（用于数字类型）
     */
    double minValue() default Double.MIN_VALUE;
    
    /**
     * 字段最大值（用于数字类型）
     */
    double maxValue() default Double.MAX_VALUE;
    
    /**
     * 正则表达式验证规则
     */
    String pattern() default "";
    
    /**
     * 验证失败时的提示信息
     */
    String message() default "";
    
    /**
     * 字段分组（用于不同场景下的字段验证）
     */
    String[] groups() default {};
    
    /**
     * 是否在列表中显示
     */
    boolean showInList() default true;
    
    /**
     * 是否在表单中显示
     */
    boolean showInForm() default true;
    
    /**
     * 是否支持搜索
     */
    boolean searchable() default false;
    
    /**
     * 排序权重（数值越大越靠前）
     */
    int order() default 0;
    
    /**
     * 自定义属性（用于扩展）
     */
    String[] custom() default {};
}